/*************************************************************************
	> File Name: listtimer.h
	> Author: gyl
	> Mail: gyldeyx@qq.com
	> Created Time: May 13 Jan 2022 23:35:00 PM CST
 ************************************************************************/

#ifndef _LISTTIMER_H
#define _LISTTIMER_H

#include <sys/types.h>
#include <arpa/inet.h>
#include <netinet/in.h>

class util_timer;

//客户端数据，存放sockaddr_in，sockfd，及定时器结点（方便根据客户信息快速找到定时器结点）
struct client_data
{
    struct sockaddr_in address;
    int sockfd;
    util_timer *timer;
};

//定时器结点，结点中存放前驱、后继结点，以及客户端数据
class util_timer
{
public:
    util_timer() : prev(NULL), next(NULL) {}

public:
    time_t expire;
    
    void (* cb_func)(client_data *);
    client_data *user_data;
    util_timer *prev;
    util_timer *next;
};

//定时器链表
class sort_timer_lst
{
public:
    sort_timer_lst();
    ~sort_timer_lst();

    void add_timer(util_timer *timer);
    void adjust_timer(util_timer *timer);
    void del_timer(util_timer *timer);
    void tick();

    void output();

private:
    void add_timer(util_timer *timer, util_timer *lst_head);

    util_timer *head;
    util_timer *tail;
};

void cb_func(client_data *user_data);
#endif